// 里面写的是路由权限的问题
// 路由权限 - 找路由守卫
// 1.根据有无token，决定是否跳转
import store from '@/store' // token存在getters中
import router from '@/router'
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'
const whiteList = ['/login', '/404']
// 前置路由守卫 - 说明此时用户点击了跳转 - 立刻开启进度条
router.beforeEach(async (to, from, next) => {
  nprogress.start() // 开启进度条
  if (store.getters.token) { // 如果有token
    if (to.path === '/login') { // 并且跳转的路径位login
      next('/') // 直接跳转首页
    } else {
      if (!store.getters.name) { // 如果getters中没有用户信息
        const result = await store.dispatch('user/getUserInfo') // 获取用户信息
        const routes = await store.dispatch('permission/filterRoutes', result.roles.menus)
        router.addRoutes(routes)
        // 调完router.addRoutes(routes),必须必须调用next(to.path),不可以直接调用next(),这是一个已知缺陷
        // console.log(result)
        next(to.path)
      } else {
        next() // 有token并且跳转的不是login，放行
      }
    }
  } else { // 如果没有token
    if (whiteList.indexOf(to.path) !== -1) { // 并且跳转的路径在白名单内
      next() // 放行
    } else {
      next('/login') // 没有token并且跳转路径不在白名单内，跳转登录页
    }
  }
  nprogress.done() // 解决手动跳转进度条无法关闭的问题
})
router.afterEach(() => {
  nprogress.done() // 跳转完成，关闭进度条 - 如果只在后置守卫里面关闭进度条的话，当有token手动跳转login时，由于没有跳转，仍在首页，会导致进度条一致存在（因为没有在beforeEach中关闭进度条）
})
